package util

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
)

var Ctx context.Context

// 连接 Redis
func ConnectRedis() (*redis.Client, error) {
	rdb := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // 如果有密码，填写相应密码
		DB:       0,  // Redis 数据库索引
	})

	// 测试连接
	_, err := rdb.Ping(Ctx).Result()
	if err != nil {
		return nil, fmt.Errorf("无法连接 Redis: %s", err)
	}

	return rdb, nil
}

// 从缓存中读取数据
func ReadFromCache(client *redis.Client, key string) (string, error) {
	val, err := client.Get(Ctx, key).Result()
	if err == redis.Nil {
		return "", fmt.Errorf("缓存中不存在键：%s", key)
	} else if err != nil {
		return "", fmt.Errorf("从缓存中读取数据失败：%s", err)
	}
	return val, nil
}

// 将数据存储到缓存中
func WriteToCache(client *redis.Client, key string, value string) error {
	err := client.Set(Ctx, key, value, 0).Err()
	if err != nil {
		return fmt.Errorf("将数据存储到缓存中失败：%s", err)
	}
	return nil
}
